package indi.kider.server.bill.service;

import indi.kider.common.model.bill.BillPrepaidInfo;
import indi.kider.server.bill.model.CommRespRegitAndDeductModel;

import java.util.List;

/**
 * 预付费相关的服务接口
 *
 * @author wangjingjing
 * @create 2018-09-20
 **/
public interface PrepaidBillService {

    /**
     * 每天生成预付费的明细账单。
     */
    void produceBillEveryDay();

    /**
     * 对每天生成的账单进行钱包扣费和销账。
     * 定时器设定他的执行周期。
     */
    void settlementBillEveryDay();

    /**
     * 开户的时候进行钱包的申请。
     *
     * @param tenantId
     * @return
     */
    CommRespRegitAndDeductModel regitWallet(Long tenantId);

    /**
     * 汇总月账单
     * @param month
     */
    void summaryMonthBill(String month);

    /**
     * 账户扣款（退租）
     *
     * @param rentId
     * @return
     */
    List<CommRespRegitAndDeductModel> deductionBill(Long rentId);

    /**
     * 自动注册钱包
     */
    void regitWallet();

    /**
     * 根据用户ID和月份查询月份的扣款记录明细
     *
     * @param rentId
     * @param dateMoney 格式‘yyyyMM’
     * @return
     */
    List<BillPrepaidInfo> selectPrepaidInfoByRentId(Long rentId, String dateMoney);

    /**
     * 根据预付费每天的扣款记录生成月账单
     */
    void statisticalPrepaidDetailedBill();

    /**
     * 按用户编号查询是否余额不足。
     *
     * @param tenantId
     * @return
     */
    boolean judgingTheBalanceByTenantId(Long tenantId);

    /**
     * 判断能否退押金
     *
     * @param tenantId
     * @return
     */
    boolean canRefund(Long tenantId);

}
